﻿using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.IO;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
using Sinacor.Infra.UI.Common;
using Sinacor.Infra.UI.Controls.SmartClient;
using Sinacor.Infra.UI.Controls.SmartClient.Validation;
using Sinacor.Infra.UI.Controls;
using Sinacor.UI.Bovespa.Ordens.Presenter;
using Sinacor.UI.Bovespa.Ordens.Model;
using Sinacor.UI.Bovespa.Ordens.Model.Enum;
using System.Linq;
using System.Text;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;
using PSE.Framework.UI.Resources;

namespace Sinacor.UI.Bovespa.Ordens.View.SmartClient
{

    /// <summary>
    ///     Classe view para Casamento de Pré-Boletos
    /// </summary>
    public partial class CasamentoPreBoleto : SinacorWindow, ICasamentoPreBoleto
    {
        #region Variáveis de classe

        private CasamentoPreBoletoPresenter _presenter;
        private Model.CasamentoPreBoleto _model;
        private Model.CasamentoPreBoleto _modelBeforeEdit;
        private int? _numeroPreBoleto;

        private int? NumeroPreBoleto
        {
            get { return _numeroPreBoleto; }
            set { _numeroPreBoleto = value; }

        }

        private bool _exibirTela = true;

        public bool ExibirTela
        {
            get { return _exibirTela; }
            set { _exibirTela = value; }
        }

        #endregion

        #region CasamentoPreBoleto
        public CasamentoPreBoletoPresenter CasamentoPreBoletoPresenter { get; set; }
        #endregion

        /// <summary>
        /// Construtor da classe
        /// </summary>
        /// <user>jrimes</user>
        public CasamentoPreBoleto()
        {
            //20080407 17:15 - Alterado - RValadao.7Comm
            this.AfterInitialize += new RoutedEventHandler(CasamentoPreBoleto_AfterInitialize);
            this.dataPreBoleto.NewItemType = typeof(Model.CasamentoPreBoleto);
            this.dataNegocio.NewItemType = typeof(Model.ConsultarNegociosParaCasar);
            this.dataNegocio.Columns["TipoEstrategia"].Visible = (bool)this.checkAnalitico.IsChecked; 


        }

        void dataPreBoleto_EndingInsert(object sender, CancelItemEventArgs e)
        {

            if (e.OriginalSource is BaseRow)
            {
                Model.CasamentoPreBoleto _modelCurrent = new Model.CasamentoPreBoleto();
                _modelCurrent = ((Model.CasamentoPreBoleto)e.ItemInfo.Item);

                if (!this._presenter.VerificarLimiteSaldo(_modelCurrent, this._model))
                {
                    e.Cancel = true;
                    this.ExibirMensagem(Sinacor.UI.Bovespa.Ordens.Model.Enum.Mensagem.QuantidadeNegocioMaiorSaldo);
                }
            }
        }

        void dataNegocio_EndingInsert(object sender, CancelItemEventArgs e)
        {
            
        }




        void dataPreBoleto_InsertBegun(object sender, ItemEventArgs e)
        {
            if (e.OriginalSource is BaseRow)
            {
                _modelBeforeEdit = new Sinacor.UI.Bovespa.Ordens.Model.CasamentoPreBoleto();
                _modelBeforeEdit = (Model.CasamentoPreBoleto)this.dataPreBoleto.EditItem;
                this._presenter.CarregarEnums();
            }
        }

        void dataPreBoleto_BeingInserted(object sender, CancelItemEventArgs e)
        {            
            dataPreBoleto.GetInsertionRow().Focus();            
        }

        void dataNegocio_BeingInserted(object sender, CancelItemEventArgs e)
        {
            
        }


        /// <summary>
        /// Construtor da classe
        /// </summary>
        /// <user>jrimes</user>
        public CasamentoPreBoleto(Model.CasamentoPreBoleto model)
        {

            this.InitializeComponent();

            this._presenter = new CasamentoPreBoletoPresenter(this);
            this.DataContext = this._presenter;

            //20080410 - RValadao.7comm - Removido conteudo da classe construtor pois
            // será chamado o outro metodo construtor onde é passado a model.
            this.ModuleId = "ORD";
            this.ModulePlus = false;

            this._model = model;
            this.AfterInitialize += new RoutedEventHandler(CasamentoPreBoleto_AfterInitialize);
            this.dataPreBoleto.NewItemType = typeof(Model.CasamentoPreBoleto);
            this.dataNegocio.NewItemType = typeof(Model.ConsultarNegociosParaCasar);

            this.dataNegocio.Columns["TipoEstrategia"].Visible = (bool)this.checkAnalitico.IsChecked; 
        }

        /// <summary>
        /// Executa as chamadas aos serviços necessários para a inicialização da tela
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        void CasamentoPreBoleto_AfterInitialize(object sender, RoutedEventArgs e)
        {

            if (ValidarValores(_model))
            {
                
                _presenter.ConsultarAtualizacaoQuantidadeOrdemPreBoleto(this._model);                
                this.CarregarPreBoletos();
                this.CarregarNegociosparaCasar();
            }
            else
            {
                SinacorMessageBox.Show((string)ResourceProviderManager.GetResourceProvider().TryGetResource("Bovespa.Ordens.ErroValidacaoOrdem"), SinacorMessageBoxImage.Error);
            }



        }

        #region ApresentarEnums

        public void ApresentarEnumsTipoEstrategia()
        {
            SinacorComboBox cmbEnumsTipoEstrategia = null;
            
            // Verifica se é uma alteração ou inclusão
            if (dataPreBoleto.EditIndex > -1)
            {
                // Alteração, capturando combo

                cmbEnumsTipoEstrategia = (SinacorComboBox)ControlHelper.FindChild(
                                    dataPreBoleto.GetRow(dataPreBoleto.EditIndex),
                                    "cmbEnumsTipoEstrategia");
                cmbEnumsTipoEstrategia.ItemsSource = _presenter.EnumsTipoEstrategia;
                cmbEnumsTipoEstrategia.UpdateTarget(SinacorComboBox.ItemsSourceProperty);

            }
            else
            {
                if (dataPreBoleto.GetInsertionRow() != null)
                {
                    // Alteração, capturando combo

                    
                    cmbEnumsTipoEstrategia = (SinacorComboBox)ControlHelper.FindChild(
                                        dataPreBoleto.GetInsertionRow(),
                                        "cmbEnumsTipoEstrategia");
                    cmbEnumsTipoEstrategia.ItemsSource = _presenter.EnumsTipoEstrategia;
                    cmbEnumsTipoEstrategia.UpdateTarget(SinacorComboBox.ItemsSourceProperty);

                }
            }
            
         
        }
        #endregion


        #region dataPreBoleto_EditBegun
        private void dataPreBoleto_EditBegun(object sender, ItemEventArgs e)
        {
            if (e.OriginalSource is BaseRow)
            {
                _modelBeforeEdit = new Sinacor.UI.Bovespa.Ordens.Model.CasamentoPreBoleto();
                _modelBeforeEdit = (Model.CasamentoPreBoleto)this.dataPreBoleto.EditItem;
                this._presenter.CarregarEnums();
            }

        }
        #endregion

        private void dataNegocio_EditBegun(object sender, ItemEventArgs e)
        {


        }


        private void dataNegocio_EndingEdit(object sender, CancelItemEventArgs e)
        {

        }

        #region dataPreBoleto_EndingEdit
        private void dataPreBoleto_EndingEdit(object sender, CancelItemEventArgs e)
        {
            if (e.OriginalSource is BaseRow)
            {
                this._model.QuantidadeNegocio = this._modelBeforeEdit.QuantidadeNegocio;
                if (!this._presenter.VerificarLimiteSaldo(((Model.CasamentoPreBoleto)this.dataPreBoleto.EditItem), this._model) &&
                    (this._modelBeforeEdit.QuantidadeNegocio < ((Model.CasamentoPreBoleto)this.dataPreBoleto.EditItem).QuantidadeNegocio))
                {
                    this.ExibirMensagem(Sinacor.UI.Bovespa.Ordens.Model.Enum.Mensagem.QuantidadeNegocioMaiorSaldo);
                    e.Cancel = true;
                }
                else
                {
                    this._modelBeforeEdit = null;
                }

            }
        }

        void dataPreBoleto_BeingUpdated(object sender, CancelItemEventArgs e)
        {
            if (dataPreBoleto.SelectedIndex >= 0)
            {
                if (!(bool)checkAnalitico.IsChecked)
                {
                    SinacorMessageBox.Show((string)ResourceProviderManager.GetResourceProvider().TryGetResource("Bovespa.Ordens.Message.SalvarSomenteAnalitico"), SinacorMessageBoxImage.Information);
                    checkAnalitico.IsChecked = true;
                    VerificarPreBoletoAnalitico();
                    e.Cancel = true;
                }               
            }
        }

        void dataNegocio_BeingUpdated(object sender, CancelItemEventArgs e)
        {
            
        }
        #endregion

        /// <summary>
        /// Váriavel auxiliar para preencher estilo
        /// </summary>
        private string _style = string.Empty;

        private void dataNegocio_Saving(object sender, CancelItemsEventArgs e)
        {

        }

        #region dataPreBoleto_Saving
        private void dataPreBoleto_Saving(object sender, CancelItemsEventArgs e)
        {
            // Salva somente as models selecionadas
            //this._presenter.SalvarModels(new ModelCollection<Model.ExemploModel>(e.ItemsInfo.ToItemList()));
            SalvarPreBoleto(false);
        }
        #endregion

        private void dataNegocio_SavingAll(object sender, CancelItemsEventArgs e)
        {

        }

        #region dataPreBoleto_SavingAll
        private void dataPreBoleto_SavingAll(object sender, CancelItemsEventArgs e)
        {
            // Salva todas as models
            //this.ExemploPresenter.SalvarModels();
            SalvarPreBoleto(false);
        }
        #endregion


        #region Carregar configurações do Grid Negócio

        void dataNegocio_MouseDoubleClick(object sender, MouseButtonEventArgs e)
        {
            BaseCell cell = (BaseCell)ControlHelper.FindParent((DependencyObject)e.OriginalSource, typeof(BaseCell));
            if (this.dataNegocio.SelectedIndex < 0 || cell == null)
            {
                return;
            }
            else
            {
                this.AceitarItens();
            }
        }

        #endregion

        #region Eventos

        protected override void OnKeyDown(KeyEventArgs e)
        {
            base.OnKeyDown(e);

            switch (e.Key)
            {
                case Key.F2:
                    this.dataPreBoleto.BeginInsert();
                    break;

                case Key.F3:
                    this.dataPreBoleto.SaveAll();
                    break;

                case Key.F4:
                    this.CasarPreBoleto();
                    break;
            }
        }

        protected override void OnClosing(System.ComponentModel.CancelEventArgs e)
        {
            this.dataPreBoleto.EndUpdate();
            this.dataPreBoleto.EndInsert();
            this.DesprezaSaldoPreBoleto();
            base.OnClosing(e);                        
        }

        void dataPreBoleto_UpdateEnded(object sender, ItemEventArgs e)
        {
            if (e.OriginalSource is BaseRow)
            {
                if (!(((Model.CasamentoPreBoleto)this.dataPreBoleto.EditItem).QuantidadeNegocio.Equals(0) ||
                           ((Model.CasamentoPreBoleto)this.dataPreBoleto.EditItem).Preco.Equals(0) ||
                           ((Model.CasamentoPreBoleto)this.dataPreBoleto.EditItem).Cambio.Equals(0)))
                {
                    _presenter.CalcularVolumeItem(((Model.CasamentoPreBoleto)this.dataPreBoleto.EditItem));
                }
            }
        }

        void dataPreBoleto_InsertEnded(object sender, ItemEventArgs e)
        {
            if (e.OriginalSource is BaseRow)
            {
                if (!(((Model.CasamentoPreBoleto)this.dataPreBoleto.EditItem).QuantidadeNegocio.Equals(0) ||
                           ((Model.CasamentoPreBoleto)this.dataPreBoleto.EditItem).Preco.Equals(0) ||
                           ((Model.CasamentoPreBoleto)this.dataPreBoleto.EditItem).Cambio.Equals(0)))
                {
                    _presenter.CalcularVolumeItem(((Model.CasamentoPreBoleto)this.dataPreBoleto.EditItem));
                }
            }
        }

        #endregion



        #region Botão de Casar

        /// <summary>
        /// Botão de Casar
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void buttonCasar_Click(object sender, RoutedEventArgs e)
        {
            this.CasarPreBoleto();
        }




        #region Botão Desfazer

        void dataPreBoleto_UndidAll(object sender, ItemsEventArgs e)
        {
            VerificarPreBoletoAnalitico();
        }

        void dataPreBoleto_Undid(object sender, ItemsEventArgs e)
        {
            VerificarPreBoletoAnalitico();
        }


        #endregion

        void dataNegocio_UndidAll(object sender, ItemsEventArgs e)
        {

        }

        #endregion

        #region Check Analitico

        /// <summary>
        /// Evento do Check Analitico
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        /// <user>jrimes</user>        

        private void checkAnalitico_Click(object sender, RoutedEventArgs e)
        {
                this.ShowUserWaitingProcess();
                this.VerificarPreBoletoAnalitico();
                this.HideUserWaitingProcess();
        }

        #endregion



        #region Aceitar Itens

        /// <summary>
        /// Evento que efetuo a transferência de registro entre os grids de Negócio para o de PréBoleto
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void AceitarItens(object sender, EventArgs e)
        {
            this.AceitarItens();
        }

        private void AceitarItens()
        {
            if (this.dataNegocio.SelectedItem != null)
            {
                this._presenter.CriarPreBoletosNegocio(this.dataNegocio.SelectedItems, _model);    
            }
            else
            {
                this.ExibirMensagem(Sinacor.UI.Bovespa.Ordens.Model.Enum.Mensagem.SelecionarNegocio);
            }
        }
        #endregion


        #region Salvar Pre-Boleto

        /// <summary>
        /// Ação de salvar o pré boleto e/ou casar os mesmos.
        /// </summary>
        /// <param name="CasarDisponiveis"></param>
        /// <user>jrimes</user>
        public void SalvarPreBoleto(bool fromBotaoCasamento)
        {

            this.ShowUserWaitingProcess();

            if (dataPreBoleto.HasItems)
            {                
                this.dataPreBoleto.EndUpdate();
                this.dataPreBoleto.EndInsert();
                ModelCollection<Model.CasamentoPreBoleto> lstExclusao = this._presenter.ModelCasamentoPreBoleto.GetDeleted();
                ModelCollection<Model.CasamentoPreBoleto> lstInclusao = this._presenter.ModelCasamentoPreBoleto.GetInserted();
                ModelCollection<Model.CasamentoPreBoleto> lstAlteracao = this._presenter.ModelCasamentoPreBoleto.GetUpdated();

                if (this._model != null)
                {
                    if (lstInclusao != null && lstInclusao.Count > 0 || lstExclusao != null && lstExclusao.Count > 0 || lstAlteracao != null && lstAlteracao.Count > 0)
                    {
                        this._presenter.Salvar(this._model, lstInclusao, lstExclusao, lstAlteracao);

                        this.VerificarPreBoletoAnalitico();
                        //20080420 10:27 - Rvaladao
                        //Carregar os negócios após salvar pré boleto.
                        this.CarregarNegociosparaCasar();
                    }
                    else if (fromBotaoCasamento)
                    {
                        //Realiza o casamento dos pre boletos que já estavam cadastrados.
                        this._presenter.CasarPreBoletos(this._model);
                        this.VerificarPreBoletoAnalitico();
                    }
                    else if (this._model.DesprezaSaldo != this.checkDesprezaSald.IsChecked.Value)
                    {
                        this.DesprezaSaldoPreBoleto();
                    }
                    else
                    {
                        this.ExibirMensagem(Sinacor.UI.Bovespa.Ordens.Model.Enum.Mensagem.NenhumRegistrosParaSalvar);
                    }
                }

            }
            else
            {
                this.ExibirMensagem(Sinacor.UI.Bovespa.Ordens.Model.Enum.Mensagem.NenhumRegistrosParaSalvar);
            }

            this.HideUserWaitingProcess();


        }


        #endregion

        #region Verificar Analitico

        /// <summary>
        /// Verifica se o CheckAnalitico esta checado
        /// </summary>
        /// <user>jrimes</user>
        public void VerificarPreBoletoAnalitico()
        {

            dataNegocio.Columns["TipoEstrategia"].Visible = (bool)this.checkAnalitico.IsChecked; 

            if ((bool)this.checkAnalitico.IsChecked)
            {
                
                this._presenter.CarregarPreBoletosAnalitico(this._model);
            }
            else
            {
                this._presenter.CarregarPreBoletos(this._model);
            }
            this._presenter.CarregarNegocios(this._model);

        }

        #endregion

        #region Casar os Pré Boletos

        /// <summary>
        /// Faz o casamento de Pré-Boletos
        /// </summary>
        /// <user>jrimes</user>
        public void CasarPreBoleto()
        {
            //20080412 11:40 - RValadao.7Comm
            //Salva alterações do grid pre boleto e realiza o casamento de pre boletos novos
            //e já existentes.
            this.SalvarPreBoleto(true);
        }

        #endregion

        #region Carregar Pre Boletos

        /// <summary>
        /// Carrega os dados da grid Pré Boleto e Exibe calculos
        /// </summary>
        /// <user>jrimes</user>
        public void CarregarPreBoletos()
        {
            this.ShowUserWaitingProcess();
            this._presenter.CarregarPreBoletos(this._model);
            this.HideUserWaitingProcess();
        }

        #endregion

        #region Carregar Negócios para Casar

        /// <summary>
        /// Carrega os dados da grid Negócios para Casar
        /// </summary>
        /// <user>jrimes</user>
        public void CarregarNegociosparaCasar()
        {
            //this.ShowUserWaitingProcess(); 
            this._presenter.CarregarNegocios(this._model);
            //this.HideUserWaitingProcess();
        }

        #endregion

        #region Despreza Saldo Pre Boleto

        /// <summary>
        /// Método para o checkDespresaSaldo
        /// </summary>
        /// <user>jrimes</user>
        public void DesprezaSaldoPreBoleto()
        {
            if (_model != null)
            {
                this._model.DesprezaSaldo = this.checkDesprezaSald.IsChecked.Value;
                this._presenter.DesprezarSaldo(this._model);
            }
        }

        #endregion


        #region ApresentarModelsPreBoleto
        /// <summary>
        /// Exibe as models para o usuário, por causa do binding basta chamar o método UpdateTarget
        /// da grid, pasando com parâmetro a property ItemsSource. O binding do ItemsSource com a 
        /// property Models está no XAML
        /// </summary>
        public void ApresentarModelsPreBoleto()
        {
            dataPreBoleto.UpdateTarget(SinacorDataGrid.ItemsSourceProperty);
        }
        #endregion

        #region ApresentarModelsNegociosParaCasar
        /// <summary>
        /// Exibe as models para o usuário, por causa do binding basta chamar o método UpdateTarget
        /// da grid, pasando com parâmetro a property ItemsSource. O binding do ItemsSource com a 
        /// property Models está no XAML
        /// </summary>
        public void ApresentarModelsNegociosParaCasar()
        {
            dataNegocio.UpdateTarget(SinacorDataGrid.ItemsSourceProperty);
        }
        #endregion


        #region Implementação dos membros da ICasamentoPreboleto

        #region Exibir Preboleto Negocio

        /// <summary>
        ///     Exibe o negócio escolhido na linha de inserção e o remove da grid de negócios
        /// </summary>
        /// <param name="model"></param>
        public void ExibirPreboletoNegocio(Model.CasamentoPreBoleto model)
        {
        }

        /// <summary>
        ///     Exibe os negócios escolhidos na linha de inserção e o remove da grid de negócios
        /// </summary>
        /// <param name="model"></param>
        public void ExibirPreboletosNegocio()
        {
            dataNegocio.SaveAll();
            dataNegocio.UpdateTarget(SinacorDataGrid.ItemsSourceProperty);
        }


        #endregion

        #region ApagarNegocioSelecionado

        public void ApagarNegocioSelecionado(int negocio)
        {
            dataNegocio.SelectItem((object)dataNegocio.SelectedItems[negocio]);
            dataNegocio.AllowDelete = true;
            dataNegocio.Delete();            
            dataNegocio.AllowDelete = false;
        }

        #endregion

        #region Exibir Calculos

        /// <summary>
        /// Exibir Calculos
        /// </summary>
        /// <user>jrimes</user>
        public void ExibirCalculos(Model.CasamentoPreBoleto model)
        {

            //20080421 11:25 - RValadao
            //Carregar o model da tela
            this._model.QtdeDigitada = model.QtdeDigitada;
            this._model.PrecoMedio = model.PrecoMedio;
            this._model.QtdeSaldo = model.QtdeSaldo;
            this._model.Volume = model.Volume;
            this._model.MedioCambio = model.MedioCambio;
            this._model.VolCambio = model.VolCambio;

            this._model.NumeroOrdem = model.NumeroOrdem;
            this._model.NumeroOrdemSequencia = model.NumeroOrdemSequencia;
            this._model.QtdeOrdem = model.QtdeOrdem;
            this._model.QtdeADRAnexoV = model.QtdeADRAnexoV;
            this._model.Apelido = model.Apelido;
            this._model.Papel = model.Papel;
            this._model.TipoNaturezaOperacao = model.TipoNaturezaOperacao;
            this._model.DesprezaSaldo = model.DesprezaSaldo;


            //Math.Round(, 4)
            //20080421 11:28 - RValadao
            //Carregar a tela 
            this.textQtdeDigitada.Text = Math.Round(model.QtdeDigitada, 4).ToString("n4");
            this.textPrecoMedio.Text =Math.Round(model.PrecoMedio, 8).ToString("n8");

            if (model.QtdeOrdem >= 0)
            {
                this.textQtdeSaldo.Text = Math.Round(model.QtdeSaldo, 4).ToString("n4");
            }

            this.textVolume.Text = Math.Round(model.Volume, 2).ToString("n2");
            this.textMediaCambio.Text = Math.Round(model.MedioCambio, 6).ToString("n6");
            this.textVolumeCambio.Text = Math.Round(model.VolCambio, 2).ToString("n2");

            this.textOrdem.Text = model.NumeroOrdem.ToString();
            this.textOrdemDigito.Text = model.NumeroOrdemSequencia.ToString();
            this.textQtdeOrdem.Text = Math.Round(model.QtdeOrdem, 4).ToString("n4");
            this.textQtdeTitulosAnexo5.Text = Math.Round(model.QtdeADRAnexoV, 4).ToString("n4");

            this.textApelido.Text = model.Apelido.ToString();
            this.textPapel.Text = model.Papel;

            if (model.TipoNaturezaOperacao != null)
            {
                this.radioCOmpraCadastro.IsChecked = model.TipoNaturezaOperacao.Equals(TipoNaturezaOperacao.Compra);
                this.radioVendaCadastro.IsChecked = model.TipoNaturezaOperacao.Equals(TipoNaturezaOperacao.Venda);
            }

            this.checkDesprezaSald.IsChecked = model.DesprezaSaldo;

        }


        /// <summary>
        /// Exibir Calculo de Volume
        /// </summary>
        /// <user>rvaladao</user>
        public void ExibirCalculoVolume(Model.CasamentoPreBoleto model)
        {

            ((Model.CasamentoPreBoleto)this.dataPreBoleto.EditItem).Volume = model.Volume;

            SinacorDecimalTextBox txtVolume = null;
            // Verifica se é uma alteração ou inclusão
            
            if (!this.dataPreBoleto.IsInserting)            
            {
                // Alteração, capturando combo
                txtVolume = (SinacorDecimalTextBox)ControlHelper.FindChild(dataPreBoleto.GetRow(dataPreBoleto.EditIndex), "txtVolume");

            }
            else
            {
                txtVolume = (SinacorDecimalTextBox)ControlHelper.FindChild(dataPreBoleto.GetInsertionRow(), "txtVolume");
            }


            txtVolume.UpdateTarget(SinacorDecimalTextBox.ValueProperty);



        }

        #endregion

        #region Exibir Mensagem

        /// <summary>
        /// Exibe mensagem de sucesso ou falha após salvar as alterações de um Resumo Financeiro.
        /// </summary>
        /// <param name="mensagem">Indica se deve ser exibido a mensagem de sucesso ou falha.</param>
        /// <user>asoares</user>
        public void ExibirMensagem(string mensagem)
        {
            SinacorMessageBox.Show(mensagem, SinacorMessageBoxImage.None);
        }

        /// <summary>
        /// Exibe mensagem de sucesso ou falha após salvar as alterações de um Resumo Financeiro.
        /// </summary>
        /// <param name="mensagem">Indica se deve ser exibido a mensagem de sucesso ou falha.</param>
        /// <user>jrimes</user>
        public void ExibirMensagem(Sinacor.UI.Bovespa.Ordens.Model.Enum.Mensagem mensagem)
        {
            switch (mensagem)
            {
                case Sinacor.UI.Bovespa.Ordens.Model.Enum.Mensagem.ToolSalvarLayoutSucesso:
                    SinacorMessageBox.Show((string)ResourceProviderManager.GetResourceProvider().TryGetResource("Bovespa.Ordens.Message.SalvarLayoutSucesso"), SinacorMessageBoxImage.Information);
                    break;
                case Sinacor.UI.Bovespa.Ordens.Model.Enum.Mensagem.ToolSalvarLayoutFalha:
                    base.ShowError("Bovespa.Ordens.Message.SalvarLayoutFalha");
                    break;
                case Sinacor.UI.Bovespa.Ordens.Model.Enum.Mensagem.SelecionarNegocio:
                    base.ShowError("Bovespa.Ordens.Message.SelecionarNegocio");
                    break;
                case Sinacor.UI.Bovespa.Ordens.Model.Enum.Mensagem.AnaliticoDeveEstarSelecionado:
                    base.ShowError("Bovespa.Ordens.Message.AnaliticoDeveEstarSelecionado");
                    break;
                case Sinacor.UI.Bovespa.Ordens.Model.Enum.Mensagem.ConsultaSemResultado:
                    base.ShowError("Bovespa.Ordens.Message.PesquisaSemRetorno");
                    break;
                case Sinacor.UI.Bovespa.Ordens.Model.Enum.Mensagem.NenhumRegistrosParaSalvar:
                    base.ShowError("Bovespa.Ordens.Message.NenhumRegistrosParaSalvar");
                    break;
                case Sinacor.UI.Bovespa.Ordens.Model.Enum.Mensagem.CasadaComSucesso:
                    SinacorMessageBox.Show((string)ResourceProviderManager.GetResourceProvider().TryGetResource("Bovespa.Ordens.Message.CasadaComSucesso"), SinacorMessageBoxImage.Information);
                    break;
                case Sinacor.UI.Bovespa.Ordens.Model.Enum.Mensagem.QuantidadeNegocioMaiorSaldo:
                    base.ShowError("Bovespa.Ordens.Message.QuantidadeNegocioMaiorSaldo");
                    break;

            }
        }

        #endregion

        #region ValidarValores

        /// <summary>
        ///     Valida os valores passados para a tela
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        /// <user>rdorta</user>
        public bool ValidarValores(Model.CasamentoPreBoleto model)
        {
            bool preenchido = true;

            if (model.DataOrdem == null || model.DataOrdem == DateTime.MinValue)
            {
                preenchido = false;
            }

            if (model.NumeroOrdem == 0)
            {
                preenchido = false;
            }

            return preenchido;
        }

        #endregion



        #endregion


        #region Calculo Volume

        private void SinacorDecimalTextBox_LostFocus(object sender, RoutedEventArgs e)
        {
            if (this.dataPreBoleto.EditItem != null)
            {
                if (!(((Model.CasamentoPreBoleto)this.dataPreBoleto.EditItem).QuantidadeNegocio.Equals(0) ||
                        ((Model.CasamentoPreBoleto)this.dataPreBoleto.EditItem).Preco.Equals(0) ||
                        ((Model.CasamentoPreBoleto)this.dataPreBoleto.EditItem).Cambio.Equals(0)))
                {
                    _presenter.CalcularVolumeItem(((Model.CasamentoPreBoleto)this.dataPreBoleto.EditItem));
                }
            }
        }

        #endregion


        
        private void dataPreBoleto_Deleting(object sender, CancelItemsEventArgs e)
        {

            if (!dataPreBoleto.Items.Count.Equals(0)) //incluido - condição primaria foi separada e priorizada - esertorio - 200805281235 - ref issue ID0005108
            {
                if (checkAnalitico.IsChecked.HasValue && !checkAnalitico.IsChecked.Value)  //incluido - condição secundaria foi alterada para eliminar (casting) - esertorio - 200805281235 - ref issue ID0005108
                {
                    SinacorMessageBox.Show((string)ResourceProviderManager.GetResourceProvider().TryGetResource("Bovespa.Ordens.Message.SalvarSomenteAnalitico"), SinacorMessageBoxImage.Information);
                    checkAnalitico.IsChecked = true;
                    VerificarPreBoletoAnalitico();
                    e.Cancel = true;
                }               

            }

        }

        private void dataPreBoleto_Deleted(object sender, ItemsEventArgs e)
        {
            dataPreBoleto.Items.Refresh();
        }

        
        private void dataPreBoleto_ApplyingStyle(object sender, ApplyStyleEventArgs e)
        {

            if (e.ItemInfo.Item != null)
            {
                // Limpando style
                _style = string.Empty;

                if (e.OriginalSource is BaseRow)
                {
                    // BaseRow para estilos de linha
                    if (((Model.CasamentoPreBoleto)e.ItemInfo.Item).TipoSituacaoCasamento != null)
                    {
                        _presenter.InformarStatusPreBoleto((Model.Enum.TipoSituacaoCasamento)((Model.CasamentoPreBoleto)e.ItemInfo.Item).TipoSituacaoCasamento);
                    }

                }
                else if (e.OriginalSource is BaseCell)
                {
                   
                }

                // Retornando style
                e.Style = _style;
            }

        }

        public void InformarCasadas()
        {
            _style = BaseRow.GridRowBusiness01;
        }

        public void InformarNaoCasadas()
        {
            _style = BaseRow.GridRowBusiness06;
        }

        public void InformarCasadasParte()
        {
            _style = BaseRow.GridRowBusiness04;
        }

       
    }
}